import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lenovo
 * Date: 2022-08-08
 * Time: 19:48
 */
public class MySQLInert {
    public static void main(String[] args) throws SQLException {
        //1.创建数据源对象,数据源对象就是描述了要访问的数据库是啥,在哪.


//        每种数据库会提供对应的类来实现DataSource，向上转型
//        DataSource是jdbc里的，DataSource服务器于各种服务器
//        MysqlDataSource是MySQL驱动包里的
        DataSource dataSource = new MysqlDataSource();
//这里的setURL是MySQLDataSource里的，而不是DataSource里的
//        mysql是客户端-服务器结构，url描述了服务器的位置
//        但是不要所有的数据库都是客户端-服务器结构，考虑到通用性就没有将url引入到DataSource里面
//        所以这里想使用seturl方法 必须向向下转型
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java105?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("");



        //2.让代码和数据库服务器建立连接


//        connection是jdbc里的，而不是mysql驱动包里的
        Connection connection = dataSource.getConnection();
        System.out.println(connection);


        Scanner scanner = new Scanner(System.in);
        System.out.println("输入同学的id:");
        int id = scanner.nextInt();
        System.out.println("输入同学的名字:" );
        String name = scanner.next();

        //3.构造要执行的sql语句[构造要求]
//        PreparedStatement也是jdbc里的
        String sql = "insert into student values(?,?)";
         PreparedStatement statement =connection.prepareStatement(sql);
         statement.setInt(1,id);
         statement.setString(2,name);
        System.out.println("statement:" + statement);
         //4.执行sql语句[发送请求&读取响应]

//        // 4. 执行 SQL [发送请求 & 读取响应]
//        //    执行方法, 有两个
//        //    executeUpdate 对应插入删除修改语句. 返回值表示这次 SQL 操作影响到的行数.
//        //    executeQuery  对应查询语句. 返回值则是返回的临时表数据.
        int n = statement.executeUpdate();
        System.out.println("n="+n);
        //5.完成之后就要释放相关资源
        statement.close();
        connection.close();
    }
}
